/**
 * 
 */
package ec.edu.uce.tour.web.catalogos.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import ec.edu.uce.tour.dao.util.ParametroSentencia;
import ec.edu.uce.tour.dto.CiudadDTO;
import ec.edu.uce.tour.dto.SelectOneListDTO;
import ec.edu.uce.tour.excepcion.UceTourException;
import ec.edu.uce.tour.facade.UceTourGeneralServicio;
import ec.edu.uce.tour.modelo.CiudadTbl;
import ec.edu.uce.tour.modelo.PaisTbl;
import ec.edu.uce.tour.modelo.ProvinciaTbl;
import ec.edu.uce.tour.web.utilitarios.Utilitario;

/**
 * @author XPS15Z
 *
 */
@ManagedBean(name="ciudadController")
@ViewScoped
public class CiudadController implements Serializable {
	
	private static final long serialVersionUID = 1L;

	private String codigoCiudad;
	private String nombreCiudad;
	
	private Integer idEstadoCiudad;
	private List<SelectItem> listaEstado = new ArrayList<SelectItem>() {
		
		private static final long serialVersionUID = 1L;
		{
			add(new SelectItem(1, "Activo"));
			add(new SelectItem(2, "Inactivo"));
		}
	};
	private Integer idCiudad;
	private List<CiudadDTO> listaCiudad = new ArrayList<CiudadDTO>();
	private Integer idPais;
	private List<SelectItem> listaPaises= new ArrayList<SelectItem>();
	private Integer idProvincia;
	private List<SelectItem> listaProvincias= new ArrayList<SelectItem>();
	@EJB
	private UceTourGeneralServicio uceTourGeneralServicio;

	@PostConstruct
	public void init() {
		listaPaises.clear();
		idPais = 0;
		try {
			List<SelectOneListDTO> listaAuxiliar = uceTourGeneralServicio
					.obtenerDatosSelectList(PaisTbl.class, "paiIdPk",
							"paiNombre", "paiEstado", new ParametroSentencia(
									"estado", "A"));
			if (!listaAuxiliar.isEmpty()) {
				for (SelectOneListDTO selectOneListDTO : listaAuxiliar) {
					if (idPais == 0) {
						idPais = selectOneListDTO.getId();
					}
					listaPaises.add(new SelectItem(selectOneListDTO.getId(),
							selectOneListDTO.getValue().toString()));
				}

			}
			//obtenerTablaCiudad();
		} catch (UceTourException e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError("No se han podido cargar los paises", e);
		}

	}
	
	public void listaProv(){
		listaProvincias.clear();
		//idProvincia = 0;
		try{
			List<CiudadDTO>ListaAuxiliar1=uceTourGeneralServicio.cargarListaProvinciasPorIdPais(idPais);
			if(!ListaAuxiliar1.isEmpty()){
				for(CiudadDTO ciudadDTO : ListaAuxiliar1){
			    listaProvincias.add(new SelectItem(ciudadDTO.getIdProvincia(),
							ciudadDTO.getNombreProvincia()));
					}	
				}
			FacesContext.getCurrentInstance().getExternalContext()
		     .getSession(true);
			obtenerTablaCiudad();
		} catch (UceTourException e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError("No se han podido cargar los provincia", e);
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	
	 public void guardarCiudad(){
		 try {
			 if(!nombreCiudad.trim().equals("")&&!codigoCiudad.trim().equals("")) {
				CiudadTbl ciudad= new  CiudadTbl();
				ProvinciaTbl provinciaAux= new ProvinciaTbl();
				provinciaAux.setProvIdPk(idProvincia);
				ciudad.setProvinciaTbl(provinciaAux);
				ciudad.setCiuCodigo(codigoCiudad);
				ciudad.setCiuNombre(nombreCiudad);
				ciudad.setCiuEstado(idEstadoCiudad==1?"A":"I");
				String mensaje="";
				if (idCiudad != null){
					ciudad.setCiuIdPk(idCiudad);
					mensaje="Se ha actualizado correctamente la ciudad ";
					try{
						uceTourGeneralServicio.modificarCatalogo(ciudad);
						idCiudad=0;
						obtenerTablaCiudad();
					}catch(UceTourException e){
						
						Utilitario.mensajeError(e.getLocalizedMessage(), e);
					}catch (Throwable e) {
						// TODO: handle exception
						Utilitario.mensajeError(e.getLocalizedMessage(), e);
					}
				}else{
					try{
						uceTourGeneralServicio.guardarCatalogo(ciudad);
						mensaje = "Se ha guardado correctamente.";
						obtenerTablaCiudad();
					} catch (UceTourException e) {
						// TODO Auto-generated catch block
						Utilitario.mensajeError(e.getLocalizedMessage(), e);
					}catch (Throwable e) {
						// TODO Auto-generated catch block
						Utilitario.mensajeError(e.getLocalizedMessage(), e);
					}
				}
				Utilitario.mensajeInformativo(mensaje);
			 }else {
					Utilitario.mensajeError("Por favor ingrese valores validos",
							null);
				}
		 }catch (Exception e) {
				Utilitario.mensajeError(e.getLocalizedMessage(), e);
			}
	 }
	
	
	private void obtenerTablaCiudad(){
		try {
			listaCiudad = uceTourGeneralServicio.cargarListaCiudadesPorIdPais(idPais);
		} catch (UceTourException e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		}
	}
	
	public void editarCiudad(Integer idCiudad) {
		this.idCiudad = idCiudad;
		try {
			CiudadTbl ciudadActual = (CiudadTbl) uceTourGeneralServicio
					.cargarCatalogoPorId(CiudadTbl.class, idCiudad);
			idPais = ciudadActual.getProvinciaTbl().getPaisTbl().getPaiIdPk();
			idProvincia = ciudadActual.getProvinciaTbl().getProvIdPk();
			nombreCiudad =ciudadActual.getCiuNombre();
			idEstadoCiudad = ciudadActual.getCiuEstado().equals("A") ? 1
					: 0;
			codigoCiudad = ciudadActual.getCiuCodigo();

		} catch (UceTourException e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		}
	}
	
	@SuppressWarnings("unused")
	public void cancelarCiudad(){
		init ();
		idProvincia=null;
		idCiudad=null;
		codigoCiudad="";
		nombreCiudad="";
        List<String> listaProvincias = new ArrayList<String>();
		
	}
		
	/**
	 * @return the codigoCiudad
	 */
	public String getCodigoCiudad() {
		return codigoCiudad;
	}

	/**
	 * @param codigoCiudad the codigoCiudad to set
	 */
	public void setCodigoCiudad(String codigoCiudad) {
		this.codigoCiudad = codigoCiudad;
	}

	/**
	 * @return the nombreCiudad
	 */
	public String getNombreCiudad() {
		return nombreCiudad;
	}

	/**
	 * @param nombreCiudad the nombreCiudad to set
	 */
	public void setNombreCiudad(String nombreCiudad) {
		this.nombreCiudad = nombreCiudad;
	}

	/**
	 * @return the idEstadoCiudad
	 */
	public Integer getIdEstadoCiudad() {
		return idEstadoCiudad;
	}

	/**
	 * @param idEstadoCiudad the idEstadoCiudad to set
	 */
	public void setIdEstadoCiudad(Integer idEstadoCiudad) {
		this.idEstadoCiudad = idEstadoCiudad;
	}

	/**
	 * @return the listaEstado
	 */
	public List<SelectItem> getListaEstado() {
		return listaEstado;
	}

	/**
	 * @param listaEstado the listaEstado to set
	 */
	public void setListaEstado(List<SelectItem> listaEstado) {
		this.listaEstado = listaEstado;
	}

	/**
	 * @return the idCiudad
	 */
	public Integer getIdCiudad() {
		return idCiudad;
	}

	/**
	 * @param idCiudad the idCiudad to set
	 */
	public void setIdCiudad(Integer idCiudad) {
		this.idCiudad = idCiudad;
	}

	/**
	 * @return the listaCiudad
	 */
	public List<CiudadDTO> getListaCiudad() {
		return listaCiudad;
	}

	/**
	 * @param listaCiudad the listaCiudad to set
	 */
	public void setListaCiudad(List<CiudadDTO> listaCiudad) {
		this.listaCiudad = listaCiudad;
	}

	/**
	 * @return the idPais
	 */
	public Integer getIdPais() {
		return idPais;
	}

	/**
	 * @param idPais the idPais to set
	 */
	public void setIdPais(Integer idPais) {
		this.idPais = idPais;
	}

	/**
	 * @return the listaPaises
	 */
	public List<SelectItem> getListaPaises() {
		return listaPaises;
	}

	/**
	 * @param listaPaises the listaPaises to set
	 */
	public void setListaPaises(List<SelectItem> listaPaises) {
		this.listaPaises = listaPaises;
	}

	/**
	 * @return the idProvincias
	 */
	public Integer getIdProvincia() {
		return idProvincia;
	}

	/**
	 * @param idProvincias the idProvincias to set
	 */
	public void setIdProvincia(Integer idProvincia) {
		this.idProvincia= idProvincia;
	}

	/**
	 * @return the listaProvincias
	 */
	public List<SelectItem> getListaProvincias() {
		return listaProvincias;
	}

	/**
	 * @param listaProvincias the listaProvincias to set
	 */
	public void setListaProvincias(List<SelectItem> listaProvincias) {
		this.listaProvincias = listaProvincias;
	}

}
